package cn.quang.utils.decorator;

import lombok.extern.slf4j.Slf4j;

/**
 * 测试执行装饰器
 * 用于简化测试代码执行方式
 */
@Slf4j
public class TestExecutor {
    /**
     * 测试执行装饰器
     * 当指定测试模式时，执行测试逻辑，否则执行实际逻辑
     * @param sceneName 场景名
     * @param testExpression  是否测试模式，true为测试模式，false为实际模式
     * @param actual 实际逻辑
     * @param test   测试逻辑
     */
    public void execute(String sceneName, boolean testExpression, IRunner actual, IRunner test){
        TryCatchExecutor.executeWithNoneResult(sceneName,
                () -> {
                    if(testExpression)    test.run();
                    else            actual.run();
                },
                (e) -> log.error(String.format("scene[%s] test mode exception", sceneName), e)
        );
    }

    public interface IRunner {
        void run() throws Exception;
    }
}
